pdb: reconcile register manipulation between processes and domains
authorach61@arcadians.cl.cam.ac.uk <ach61@arcadians.cl.cam.ac.uk>
Wed, 13 Jul 2005 15:37:08 +0000 (15:37 +0000)
committerach61@arcadians.cl.cam.ac.uk <ach61@arcadians.cl.cam.ac.uk>
Wed, 13 Jul 2005 15:37:08 +0000 (15:37 +0000)
tools/debugger/pdb/debugger.ml
tools/debugger/pdb/pdb_caml_domain.c
tools/debugger/pdb/pdb_caml_process.c
tools/debugger/pdb/pdb_caml_xen.h

index 3dd2159c57f70afb2481e4bfd1ebdaba004b2598..4b2f53ad9b4a283b27cdb3210738f7aad212e597 100644 (file)
@@ -331,7 +331,7 @@ let process_xen_virq fd =
   let (dom, vcpu) = List.find find_pair dom_list in
   let vec = 3 in
   let sock = PDB.find_domain dom vcpu in
-  print_endline (Printf.sprintf "handle bkpt d:%d ed:%d v:%d  %s" 
+  print_endline (Printf.sprintf "handle bkpt dom:%d vcpu:%d vec:%d  %s" 
                   dom vcpu vec (Util.get_connection_info sock));
   Util.send_reply sock "S05";
   Evtchn.unmask fd channel                                (* allow next virq *)
index b54db73ca1955b9eb6054c7d91afeeff7a428f2c..7621eb45f6a3c2bb99cafe7c7aa3cf5e763ae9d1 100644 (file)
 
 #include "pdb_caml_xen.h"
 
-/* this order comes from xen/include/public/arch-x86_32.h */
-enum x86_registers { PDB_EBX, PDB_ECX, PDB_EDX, PDB_ESI, PDB_EDI,
-                     PDB_EBP, PDB_EAX, PDB_Error_code, PDB_Entry_vector, 
-                     PDB_EIP, PDB_CS, PDB_EFLAGS, PDB_ESP, PDB_SS,
-                     PDB_ES, PDB_DS, PDB_FS, PDB_GS };
-
 typedef struct
 {
     int domain;
@@ -119,26 +113,25 @@ dom_write_register (value context, value reg, value newval)
 
     switch (my_reg)
     {
-    case PDB_EBX: regs->ebx = val; break;
-    case PDB_ECX: regs->ecx = val; break;
-    case PDB_EDX: regs->edx = val; break;
-    case PDB_ESI: regs->esi = val; break;
-    case PDB_EDI: regs->edi = val; break;
-
-    case PDB_EBP: regs->ebp = val; break;
-    case PDB_EAX: regs->eax = val; break;
-    case PDB_Error_code: regs->error_code = val; break;
-    case PDB_Entry_vector: regs->entry_vector = val; break;
+    case GDB_EAX: regs->eax = val; break;
+    case GDB_ECX: regs->ecx = val; break;
+    case GDB_EDX: regs->edx = val; break;
+    case GDB_EBX: regs->ebx = val; break;
+
+    case GDB_ESP: regs->esp = val; break;
+    case GDB_EBP: regs->ebp = val; break;
+    case GDB_ESI: regs->esi = val; break;
+    case GDB_EDI: regs->edi = val; break;
  
-    case PDB_EIP: regs->eip = val; break;
-    case PDB_CS:  regs->cs  = val; break;
-    case PDB_EFLAGS: regs->eflags = val; break;
-    case PDB_ESP: regs->esp = val; break;
-    case PDB_SS:  regs->ss  = val; break;
-    case PDB_ES:  regs->es  = val; break;
-    case PDB_DS:  regs->ds  = val; break;
-    case PDB_FS:  regs->fs  = val; break;
-    case PDB_GS:  regs->gs  = val; break;
+    case GDB_EIP: regs->eip = val; break;
+    case GDB_EFL: regs->eflags = val; break;
+
+    case GDB_CS:  regs->cs  = val; break;
+    case GDB_SS:  regs->ss  = val; break;
+    case GDB_DS:  regs->ds  = val; break;
+    case GDB_ES:  regs->es  = val; break;
+    case GDB_FS:  regs->fs  = val; break;
+    case GDB_GS:  regs->gs  = val; break;
     }
 
     if ( xendebug_write_registers(xc_handle, ctx.domain, ctx.vcpu, regs) )
@@ -437,9 +430,10 @@ query_domain_stop (value unit)
         failwith("query domain stop");
     }
 
-    printf ("QDS: %d\n", count);
+    printf ("QDS [%d]: \n", count);
     for (loop = 0; loop < count; loop ++)
-        printf ("  %d %d\n", loop, dom_list[loop]);
+        printf (" %d", dom_list[loop]);
+    printf ("\n");
 
     result = caml_alloc(2,0);
     if ( count > 0 )                                                  /* car */
index e8506c771119de20c16d023f8c4f3d0caf2d3eef..53a014b6530b80774cd62b20fe05613e2309008f 100644 (file)
 #include "pdb_module.h"
 #include "pdb_caml_xen.h"
 
-/* this order comes from linux-2.6.11/include/asm-i386/ptrace.h */
-enum x86_registers { LINUX_EBX, LINUX_ECX, LINUX_EDX, LINUX_ESI, LINUX_EDI,
-                     LINUX_EBP, LINUX_EAX, LINUX_DS,  LINUX_ES,  LINUX_FS,
-                     LINUX_GS,  LINUX_ORIG_EAX, LINUX_EIP, LINUX_CS, LINUX_EFL,
-                     LINUX_ESP, LINUX_SS };
-#define FRAME_SIZE 17
-
 typedef struct
 {
     int domain;
@@ -206,7 +199,7 @@ proc_read_registers (value context)
     CAMLparam1(context);
     CAMLlocal1(result);
 
-    u32 regs[FRAME_SIZE];
+    u32 regs[REGISTER_FRAME_SIZE];
 
     pdb_request_t req;
     context_t ctx;
@@ -218,7 +211,7 @@ proc_read_registers (value context)
     req.domain  = ctx.domain;
     req.process = ctx.process;
 
-    for (loop = 0; loop < FRAME_SIZE; loop++)
+    for (loop = 0; loop < REGISTER_FRAME_SIZE; loop++)
     {
         pdb_response_t resp;
 
index 2d9a16070800583d98ce18daf56fdfd3a024139f..c4dcf5c71731835054d6d3559294940fd0929939 100644 (file)
@@ -16,6 +16,14 @@ enum gdb_registers { GDB_EAX, GDB_ECX, GDB_EDX, GDB_EBX,
                      GDB_CS,  GDB_SS,  GDB_DS,  GDB_ES,
                      GDB_FS,  GDB_GS };
 
+/* this order comes from linux-2.6.11/include/asm-i386/ptrace.h */
+enum x86_registers { LINUX_EBX, LINUX_ECX, LINUX_EDX, LINUX_ESI, LINUX_EDI,
+                     LINUX_EBP, LINUX_EAX, LINUX_DS,  LINUX_ES,  LINUX_FS,
+                     LINUX_GS,  LINUX_ORIG_EAX, LINUX_EIP, LINUX_CS, LINUX_EFL,
+                     LINUX_ESP, LINUX_SS };
+#define REGISTER_FRAME_SIZE 17
+
+
 #define PAGE_SIZE 4096
 
 extern int xc_handle;